import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
	@override
	Widget build(BuildContext context) {
		return new MaterialApp(
			title: 'Startup Name Generator',
			theme: new ThemeData(
				primaryColor: Colors.green,
			),
			home: new RandomWords()
		);
	}
}

class RandomWords extends StatefulWidget {
	@override
	State<StatefulWidget> createState() {
		return new RandomWordsState();
	}
}

class RandomWordsState extends State<RandomWords> {
	final _suggestions = <WordPair>[];
	final _saved = new Set<WordPair>();
	final _bigFont = const TextStyle(fontSize: 18);

	@override
	Widget build(BuildContext context) {
		return new Scaffold(
			appBar: new AppBar(
				title: new Text('Startup Name Generator'),
				actions: <Widget>[
					new IconButton(icon: new Icon(Icons.list), onPressed: _pushSaved)
				],
			),
			body: _buildSuggestion(),
		);
	}

	Widget _buildSuggestion() {
		return ListView.builder(
			padding: const EdgeInsets.all(16),
			itemBuilder: (context, i){
				if(i.isOdd) {
					return new Divider();
				}

				final index = i ~/ 2;
				if(index >= _suggestions.length){
					_suggestions.addAll(generateWordPairs().take(10));
				}

				return _buildRow(_suggestions[index]);
			}
		);
	}

	Widget _buildRow(WordPair pair){
		final alreadySaved = _saved.contains(pair);
		return new ListTile(
			title: new Text(
				pair.asUpperCase,
				style: _bigFont,
			),
			trailing: new Icon(
				alreadySaved ? Icons.favorite : Icons.favorite_border,
				color: alreadySaved ? Colors.red : null,
			),
			onTap: (){
				setState(() {
					alreadySaved ? _saved.remove(pair) : _saved.add(pair);
				});
			},
		);
	}

	void _pushSaved(){
		Navigator.of(context).push(
			new MaterialPageRoute(
				builder: (context){
					final tiles = _saved.map((pair){
						return new ListTile(
							title: new Text(pair.asUpperCase, style: _bigFont),
						);
					});

					final divided = ListTile.divideTiles(tiles: tiles, context: context).toList();

					return new Scaffold(
						appBar: new AppBar(
							title: new Text('Saved Suggestions'),
						),
						body: new ListView(
							children: divided,
						),
					);
				}
			)
		);
	}
}
